<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            background-color: pink;
        }
    </style>
</head>

<body>
    <div id="test"></div>

    <!-- 引入核心库 -->
    <script type="text/javascript" src="./React-js/16.8/react.development.js"></script>
    <!-- 用于支持react操作DOM -->
    <script text="text/javascript" src="./React-js/16.8/react-dom.development.js"></script>
    <!-- 用于将jsx转换为js -->
    <script text="text/javascript" src="./React-js/16.8/babel.min.js"></script>

    <script type="text/babel">
        // 定义类组件
        class Weather extends React.Component {
            constructor(props) {    // 构造器只调用一次 
                super(props)
                // 初始化状态
                this.state = {
                    isHot: false,
                    wind: '大风'
                }
                // 改变原型上的demo的this指向，并把原型上的demo赋值到实例上的demo上。处理下面this为undefind
                this.demo = this.demo.bind(this)
            }
            render() {     // 调用1+n次。1:初始化   n:状态更新的次数
                return (
                    <h2 onClick={this.demo}>今天天气{this.state.isHot ? '炎热' : '很冷'}</h2>
                )
            }
            demo() {
                // demo放在哪里? Weather的原型对象上，供实例使用
                //由于demo是作为onclick的回调，所以不是通过实例调用的，是直接调用
                //类中的方法默认开启了局部的严格模式，所以demo中的this为undefined
                console.log('this', this); // undefind

                // 不能直接修改值。数据虽然变化，但页面不刷新
                // this.state.isHot = !this.state.isHot
                // 注意：需要通过setState方法来修改状态
                this.setState({ isHot: !this.state.isHot })
            }
        }
        // 渲染组件到页面
        ReactDOM.render(<Weather />, document.getElementById('test'))

        function demo() {
            // console.log('被点击');
            alert('被点击')
        }
    </script>
</body>

</html>